// 导入Vite核心模块和工具函数
import {defineConfig, loadEnv} from 'vite';
// 导入Vue插件
import vue from '@vitejs/plugin-vue';
// 导入路径处理模块
import path from 'path';
// 导入HTML插件，用于向HTML模板注入数据
import {createHtmlPlugin} from 'vite-plugin-html';
// 导入压缩插件
import {compression} from 'vite-plugin-compression2';
// 导入SVG加载器插件
import svgLoader from 'vite-svg-loader';

// Vite配置入口
// https://vite.dev/config/
export default defineConfig(({mode}) => {
  // 加载环境变量，根据当前模式(mode)从.env文件中读取
  const env = loadEnv(mode, process.cwd());

  return {
    // 基础配置
    base: '/',
    // 插件配置
    plugins: [
      // 使用Vue插件
      vue(),
      // 配置HTML插件，注入页面元数据
      createHtmlPlugin({
        // 不压缩 index.html
        minify: false,
        inject: {
          data: {
            title: env.VITE_APP_TITLE, // 页面标题，从环境变量获取
            keywords: env.VITE_APP_KEYWORDS, // 页面关键词，从环境变量获取
            description: env.VITE_APP_DESCRIPTION // 页面描述，从环境变量获取
          }
        }
      }),
      // 配置SVG加载器插件
      svgLoader(),
      // 配置压缩插件
      compression({
        algorithm: 'gzip', // 使用gzip压缩
        ext: '.gz', // 压缩文件后缀
        threshold: 1024, // 文件大小超过1KB才压缩
        deleteOriginFile: false // 不删除原始文件
      })
    ],

    // 路径解析配置
    resolve: {
      // 配置路径别名
      alias: {
        '@': path.resolve(__dirname, 'src'), // 设置@别名指向src目录
      },
      // 配置文件扩展名省略
      extensions: ['.js', '.ts', '.vue', '.json', '.svg', '.mjs', '.jsx', '.tsx']
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@use "@/styles/variables.scss" as *;`
        },
        less: {
          modifyVars: {
            hack: `true; @import (reference) "${path.resolve('src/styles/variables.less')}";`,
          },
          math: 'strict',
          javascriptEnabled: true,
        },
      },
    },

    // 全局变量定义
    define: {
      // 将环境变量注入到客户端代码中
      'process.env.VITE_API_BASE_URL': JSON.stringify(env.VITE_API_BASE_URL)
    },

    // 开发服务器配置
    server: {
      port: 3000, // 开发服务器端口
      host: '0.0.0.0', // 允许外部访问
      open: true, // 自动打开浏览器
      hot: true, // 启用热模块替换
    },
    // 构建配置
    build: {
      sourcemap: false, // 关闭source map生成
      chunkSizeWarningLimit: 2000, // 配置chunk大小警告限制
    },
  };
});
